"""
多继承介绍

概念：子类可以拥有多个父类，并且具有所有父类的属性和方法
语法：
    class 子类名(父类名1, 父类名2, ...):
        pass
注意事项：
    如果父类之间存在同名的属性或方法，应该尽量避免使用多继承
    哪个父类写在前面，就优先调用哪个父类的方法

Python 中的 MRO -- 方法搜索顺序：
    1) Python 中对类提供了一个内置的属性 __mro__, 可以查看方法的搜索顺序
        MRO 是 Method Resolution Order 的简写形式，主要用于在多继承时判断方法、属性的调用路径
            例如：print(C.__mro__)
    2) 在搜索方法时，按照 __mro__ 的输出结果从左到右的顺序查找的
    3) 如果在当前类中找到方法，就直接执行，不再搜索，
    4) 如果没找到，就继续查找下一个类中的方法，如果找到就直接执行，不再搜索
    5) 如果找到最后一个类，还没找到方法，程序报错
"""
class A:
    def a(self):
        print("a")


class B:
    def b(self):
        print("b")


class C(A, B):
    def c(self):
        print("c")


# 创建子类的对象
c = C()
c.a()
c.b()
c.c()

# 打印 C 类的对象调用方法的顺序
## (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
print(C.__mro__)
